From 18e4a3a4a1a0916dca45712e0e8b65a1316f798f Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Tue, 6 Dec 2011 20:20:39 +0100 Subject: [PATCH] gtk: Only set widget under device on non-virtual crossing events _gtk_widget_set_device_window() is suppose to make accounting of the topmost widget under the device at each time, so avoid setting it on virtual crossing events as the device is already in another window. --- gtk/gtkmain.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c index e8a15b44cc..962656950e 100644 --- a/gtk/gtkmain.c +++ b/gtk/gtkmain.c @@ -1688,17 +1688,21 @@ gtk_main_do_event (GdkEvent *event) break; case GDK_ENTER_NOTIFY: - _gtk_widget_set_device_window (event_widget, - gdk_event_get_device (event), - event->any.window); + if (event->crossing.detail != GDK_NOTIFY_VIRTUAL && + event->crossing.detail != GDK_NOTIFY_NONLINEAR_VIRTUAL) + _gtk_widget_set_device_window (event_widget, + gdk_event_get_device (event), + event->any.window); if (gtk_widget_is_sensitive (grab_widget)) gtk_widget_event (grab_widget, event); break; case GDK_LEAVE_NOTIFY: - _gtk_widget_set_device_window (event_widget, - gdk_event_get_device (event), - NULL); + if (event->crossing.detail != GDK_NOTIFY_VIRTUAL && + event->crossing.detail != GDK_NOTIFY_NONLINEAR_VIRTUAL) + _gtk_widget_set_device_window (event_widget, + gdk_event_get_device (event), + NULL); if (gtk_widget_is_sensitive (grab_widget)) gtk_widget_event (grab_widget, event); break; -- 2.30.2